package com.vegetable.modules.service.finance;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vegetable.modules.entity.finance.po.CustomerCollectionAlertRecordQueryPO;
import com.vegetable.modules.entity.finance.vo.CustomerCollectionAlertRecordVO;
import com.vegetable.modules.entity.finance.vo.CustomerOverdueStatisticsVO;
import com.vegetable.modules.entity.finance.vo.OverdueLevelStatisticsVO;

import java.util.List;

/**
 * <p>
 * 客户回款预警 - 实时查询服务类
 * </p>
 *
 * @author vegetable
 * @since 2025-10-24
 */
public interface ICustomerCollectionAlertRecordService {

    /**
     * 实时查询超期未回款订单
     * 根据客户预警设置，实时计算每个客户的超期未回款订单
     *
     * @param queryPO 查询参数
     * @return 分页数据
     */
    IPage<CustomerCollectionAlertRecordVO> queryOverdueOrders(CustomerCollectionAlertRecordQueryPO queryPO);

    /**
     * 按逾期等级统计未回款账期生命周期
     * 统计5个等级：15天以内、15-29天、30-59天、60-89天、90天以上
     *
     * @param queryPO 查询参数
     * @return 统计列表
     */
    List<OverdueLevelStatisticsVO> queryOverdueLevelStatistics(CustomerCollectionAlertRecordQueryPO queryPO);

    /**
     * 按逾期等级查询订单明细（分页）
     * 查询某个逾期等级下的具体订单列表
     *
     * @param queryPO 查询参数（必须包含overdueLevel参数）
     * @return 分页数据
     */
    IPage<CustomerCollectionAlertRecordVO> queryOverdueLevelDetail(CustomerCollectionAlertRecordQueryPO queryPO);

    /**
     * 按客户ID查询逾期统计
     * 分析每个客户的账期情况，包含各逾期等级的订单数和金额
     *
     * @param queryPO 查询参数
     * @return 客户逾期统计列表
     */
    List<CustomerOverdueStatisticsVO> queryCustomerOverdueStatistics(CustomerCollectionAlertRecordQueryPO queryPO);

    /**
     * 按逾期等级查询客户统计
     * 查询有指定逾期等级订单的客户列表，比如查询所有有90天以上逾期订单的客户
     *
     * @param queryPO 查询参数（必须包含overdueLevel参数）
     * @return 客户逾期统计列表
     */
    List<CustomerOverdueStatisticsVO> queryCustomerStatisticsByLevel(CustomerCollectionAlertRecordQueryPO queryPO);
}
